package jp.co.nes.awssupport.common.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.dbutils.BeanProcessor;
import org.apache.commons.dbutils.ColumnHandler;

/**
 * BeanProcessorExです。<br>
 * 追加したColumnHandlerを使用するためのクラスです。
 */
public class BeanProcessorEx extends BeanProcessor {

    /** 追加するColumnHandlerを登録するリスト */
    private static List<ColumnHandler> addColumnHandlerList = new ArrayList<>();

    /**
     * ZonedDateTimeColumnHandlerをリストに登録します。
     */
    static {
        addColumnHandlerList.add(new ZonedDateTimeColumnHandler());
    }

    /**
     * デフォルトコンストラクタです。
     */
    public BeanProcessorEx() {
    }

    /*
     * (非 Javadoc)
     * @see org.apache.commons.dbutils.BeanProcessor#processColumn(java.sql.ResultSet, int, java.lang.Class)
     */
    @Override
    protected Object processColumn(ResultSet rs, int index, Class<?> propType) throws SQLException {
        for (ColumnHandler addColumnHandler : addColumnHandlerList) {
            if (addColumnHandler.match(propType)) {
                return addColumnHandler.apply(rs, index);
            }
        }
        return super.processColumn(rs, index, propType);
    }

}
